package com.mzy.javaapi.Comparable;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author mzy
 * @Date 2021/11/14 19:33
 * @Version 1.0
 */

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Arrays;

/**
 * Comparable接口  -- 可以直接使用java.util.Arrays类进行数组的排序操作，但对象所在的类必须实现
 * Comparable接口，用于指定排序接口。
 *
 * Comparable接口的定义如下：
 * public interface Comparable<T>{
 *     public int compareTo(T O);
 * }
 * 此方法返回一个int类型的数据，但是此int的值只能是以下三种：
 * 1 ： 表示大于
 * -1 ： 表示小于
 * 0 ： 表示相等
 */
@Getter
@Setter
@AllArgsConstructor
@ToString
public class Student implements Comparable<Student>{
    /**
     * 实现一个需求，定义一个学生类，里面有姓名，年龄，成绩三个属性，要求按成绩由高到低排序，如果成绩相等，则按照年龄由低到高排序。
     */
    private String name;
    private int age;
    private float score;


    @Override
    public int compareTo(Student stu) {
        if (this.score >stu.score){
            return -1;
        }else if (this.score<stu.score){
            return 1;
        }else {
            if (this.age>stu.age){
                return -1;
            }else if (this.age<stu.age){
                return 1;
            }else {
                return 0;
            }
        }
    }
}


 class T {
    public static void main(String[] args){

        Student[] students = new Student[]{
                new Student("张三", 22, 80f),
                new Student("李四", 23, 83f),
                new Student("王五", 21, 80f)};

        for (Student student : students) {
            System.out.println(student);
        }
        System.out.println("------------");
        Arrays.sort(students);
        for (Student item:
             students) {
            System.out.println(item);
        }
    }
}
